import axios from "axios";

const baseURL = 'http://localhost:10002';
const TOKEN_INVALID = "token已过期，请重新登录";
const NETWORK_ERROR = "网络请求异常，请稍后重试";
const service = axios.create({
    baseURL,
    timeout: 8000,
});

/* service.interceptors.request.use((req) => {
	const headers = req.headers ;
	headers.Authorization = state.token ;
	return req ;
})
 */
service.interceptors.response.use(response => {
    // 对响应数据做点什么
    return response.data; // 根据你的需求返回数据或者处理后的数据
}, error => {
    let message = '';
    // 对响应错误做点什么
    if (error.response) {
        // 请求已发出，但服务器响应的状态码不在 2xx 范围内
        //console.error('Error Status:', error.response.status);
        //console.error('Error Data:', error.response.data);
        // 根据错误状态码进行不同的错误处理
        switch (error.response.status) {
            case 401:
                message = TOKEN_INVALID;
                break;
            case 403:
                message = '禁止访问';
                break;
            case 404:
                message = '资源未找到';
                break;
            case 415:
                message = '不支持的媒体格式,请求数据错误';
                break;
            default:
                // 其他错误处理
                break;
        }
    } else if (error.request) {
        // 请求已经发出，但没有收到响应
        message = NETWORK_ERROR;
    } else {
        // 在设置请求时发生了某些错误
        message = '请求时发生了某些错误';
    }
    error.message = message;
    return Promise.reject(error); // 返回一个失败的Promise，以便后续的错误处理程序可以继续处理这个错误。
});

function request(options) {
    options.method = options.method || 'get';
    let method = options.method.toLowerCase();
    if ('post' === method) {
        const params = new URLSearchParams();
        for (const key in options.data) {
            let value = options.data[key];
            params.append(key, value);
        }
        let contentType = options.headers?.['Content-Type'] || 'application/x-www-form-urlencoded';
        return service.post(options.url, params, {
            headers: {
                'Content-Type': contentType
            }
        });
    } else if ('patch' === method) {
        return service.patch(options.url, options.data);
    } else {
        options.params = options.data;
        return service(options);
    }
}

export default request;